【奇怪的东西】关于关注我的人的统计

管理员已明确表示该脚本被滥用导致卡服,且相关接口功能也遭到阉割,故此代码现仅供考古。

2020/6/27 400粉祭

2020/7/21 500粉祭

2020/8/1 600粉祭(反正脚本已经废了

感谢大家的支持!!

无聊写了个脚本统计一下所有粉丝的数据,看看都是什么人关注我

截至2020/7/21 17:38

(直接取的脚本输出,能看得懂啥意思吧)

followers: 500
color: 
	Cheater: 3
	Gray: 23
	Blue: 137
	Green: 133
	Orange: 97
	Red: 103
	Purple: 4
ccflevel: 
	0: 356
	3: 13
	4: 31
	5: 44
	6: 23
	7: 31
	8: 2
	9: 0
	10: 0
has badge: 7
banned: 5
average follower count: 109.886
average following count: 96.576
average uid: 198898.96
friends: 47

以后涨粉了可能会更新的。

脚本

应大家要求重造了一遍脚本然后发出来了……

由于不会JS所以粗制滥造,勿喷,嫌差就自己写去

7/22:已更新,以下为异步版本

使用方法:把第 20 行的 uid 改成你的然后扔到浏览器控制台里

如果爆了503/504什么的无视就行,会自动重试

跑粉丝较多的人效果还是很差,疑似服务端问题(响应时间明显延长,难道是服务端对粉丝暴力排序?),我这里无能为力了

疑似相关接口遭到阉割,只能看前20页,所以理论上只能正常跑400粉以下的

function f_request_sync(url) {
    var xhr = new XMLHttpRequest();
    xhr.open("GET", url, false);
    xhr.send(null);
    if (xhr.status != 200) return;
    return JSON.parse(xhr.response);
}
function f_request(url, id) {
	var xhr = new XMLHttpRequest();
	xhr.onreadystatechange = function() {
		if (xhr.readyState == 4) {
			if (xhr.status == 200)
				f_handle(JSON.parse(xhr.response));
			else f_error(id);
		}
	}
	xhr.open("GET", url, true);
	xhr.send(null);
}
const f_uid = 90893;
var f_users = [];
var f_queue = [];
var f_id;
var f_succ = 0, f_pages;
function f_handle(data) {
	f_users.push.apply(f_users, data.users.result);
	f_succ++;
}
function f_error(id) {
	f_queue.push(id);
}
function f_work() {
	console.log(f_succ+'/'+f_pages);
	if (f_pages == f_succ) {
		clearInterval(f_id);
		f_info();
		return;
	}
	var t = 10;
	while (t > 0 && f_queue.length > 0) {
		t--;
		var id = f_queue.pop();
		f_request('https://www.luogu.com.cn/fe/api/user/followers?user='+f_uid+'&page='+id, id);
	}
}
function f_main() {
	var data = f_request_sync('https://www.luogu.com.cn/fe/api/user/followers?user='+f_uid+'&page=1');
	var count = data.users.count, per_page = data.users.perPage;
	f_pages = Math.ceil(data.users.count / data.users.perPage);
	for (var i = 1; i <= f_pages; i++)
		f_queue.push(i);
	f_id = setInterval(f_work, 1000);
}
function f_info() {
	var f_followers = f_users.length;
	var f_color = {Cheater:0,Gray:0,Blue:0,Green:0,Orange:0,Red:0,Purple:0};
	var f_ccflevel = {'0':0,'3':0,'4':0,'5':0,'6':0,'7':0,'8':0,'9':0,'10':0};
	var f_badge = 0;
	var f_banned = 0;
	var f_sum_follower = 0;
	var f_sum_following = 0;
	var f_sum_uid = 0;
	var f_friends = 0;
	for (var i = 0; i < f_followers; i++) {
		var c = f_users[i];
		f_color[c.color]++;
		f_ccflevel[c.ccfLevel]++;
		if (c.badge) f_badge++;
		if (c.isBanned) f_banned++;
		f_sum_follower += c.followerCount;
		f_sum_following += c.followingCount;
		f_sum_uid += c.uid;
		if (c.userRelationship) f_friends++;
	}
	console.log('followers: '+f_followers);
	console.log('color: ');
	for (var x in f_color)
		console.log('\t'+x+': '+f_color[x]);
	console.log('ccflevel: ');
	for (var x in f_ccflevel)
		console.log('\t'+x+': '+f_ccflevel[x]);
	console.log('has badge: '+f_badge);
	console.log('banned: '+f_banned);
	console.log('average follower count: '+f_sum_follower/f_followers);
	console.log('average following count: '+f_sum_following/f_followers);
	console.log('average uid: '+f_sum_uid/f_followers);
	console.log('friends: '+f_friends);
}
f_main();